#!/bin/bash
echo "配置Docker镜像加速器,提升Docker运行时拉取镜像的下载速度"
echo "配置文件位置：/etc/docker/daemon.json"
echo "检查必备工具是否存在"
# 检查必备工具是否存在
command -v bc &> /dev/null || { echo "bc未安装，正在安装..."; sudo apt install -y bc; }
command -v jq &> /dev/null || { echo "jq未安装，正在安装..."; sudo apt install -y jq; }
# 配置 Docker 镜像加速器
configure_mirror() {
  # 创建或编辑 Docker 配置文件
  if [ ! -f /etc/docker/daemon.json ]; then
    sudo touch /etc/docker/daemon.json
  fi

  # 检查并初始化registry-mirrors字段
  if ! grep -q '"registry-mirrors"' /etc/docker/daemon.json; then
    echo '{"registry-mirrors": ["https://registry.docker-cn.com"]}' | sudo tee /etc/docker/daemon.json > /dev/null
  else
    # 如果registry-mirrors已存在，则追加新的镜像加速器地址（假设已有内容格式正确）
    if ! grep -q "\"https://registry.docker-cn.com\"" /etc/docker/daemon.json; then
      sudo sed -i '/"registry-mirrors": \[/a \ \ \ \ "https:\/\/registry.docker-cn.com",' /etc/docker/daemon.json
      # 去除数组末尾多余的逗号（如果有的话）
      sudo sed -i 's/,"$/]/' /etc/docker/daemon.json
    fi
  fi

  # 重启Docker服务以应用更改
  sudo systemctl restart docker
}

# 检测配置前拉取镜像速度（带5分钟超时）
echo "开始测试配置前的镜像下载速度..."
start_time=$(date +%s.%N)
timeout 300 sudo docker pull ubuntu:latest > /dev/null 2>&1 || echo "镜像拉取超时"
end_time=$(date +%s.%N)
duration_before=$(bc <<< "$end_time - $start_time")
echo "配置前拉取ubuntu:latest镜像耗时：$duration_before秒"

# 如果超时，则记录为特定值，例如999秒
if [[ $? -eq 124 ]]; then
  duration_before=999.0
fi


# 配置 Docker 镜像加速器
echo "进行Docker镜像加速器配置..."
configure_mirror





# 检查配置是否成功（不使用jq）
echo "检查Docker镜像加速器配置是否成功..."
mirror_config=$(sudo cat /etc/docker/daemon.json)
if [[ $mirror_config =~ registry-mirrors.*"https://registry.docker-cn.com" ]]; then
  echo "Docker镜像加速器配置成功！"
  # 检测配置后拉取镜像速度
    echo "开始测试配置后的镜像下载速度..."
    start_time=$(date +%s.%N)
    sudo docker pull ubuntu:latest > /dev/null
    end_time=$(date +%s.%N)
    duration_after=$(bc <<< "$end_time - $start_time")
    echo "配置后拉取ubuntu:latest镜像耗时：$duration_after秒"

    echo "完成测试，比较两次拉取速度以评估镜像加速器效果。"
else
  echo "Docker镜像加速器配置未成功，请检查配置文件及权限。"
fi




